Memristors are devices that can be programmed to different resistive states by applying a programming energy, for example, a voltage. After programming, the state of the memristor can be read and remains stable over a specified time period. Large crossbar arrays of memristive elements can be used in a variety of applications, including non-volatile solid state memory, programmable logic, signal processing control systems, pattern recognition, and other applications.